const db = uniCloud.database();
const $ = db.command
const userTable = db.collection("uni-id-users")
const nowTime = new Date().getTime()
/**
 * 获取直接推荐人，并且确定直接推荐人的身份及等级
 * @param {String} id   用户ID
 * @param {String} orderid   用户订单
 * @returns
 */
async function getInviteUser({
	id,
	orderid
} = {}) {
	console.log("InviteUser-two-one-orderid",orderid)
	let userArr = []
	let res = await userTable.doc(id).field({
		inviter_uid: true
	}).get()
	userTable.doc(id).update({//设置成为红娘的时间为当前时间
		upred_time:nowTime
	}).then(res=>{
		console.log("更新成为红娘时间，res===>",res);
	})
	let ids = res.data[0].inviter_uid || []
	if (ids.length == 0) { //没有直接推荐人
		userArr.push({ //更新当前人身份为红娘
			id,
			level: 1,
			isHow: 1,
			isWho: '',
			subNum: 0,
		})
		let r1 = await setInviteUser(userArr)
		let r2 = await setProfit({id,orderid,price:52000})
		return{
			user:r1,
			order:r2
		}
	}
	let users = await userTable.where({
		_id: $.in(ids)
	}).field({
		isHow: true,
		isWho: true,
		level: true,
		subNum: true
	}).get()
	console.log("users++", users.data)
	let upUser = {}
	let dirUser = {}
	let isWho = ''
	let uLen = users.data.length 
	let flag = false
	for (let i = 0; i < ids.length; i++) { //为了控制结果的顺序,数据查询的顺序不可信
		for (let j = 0; j < uLen; j++) { //循环当前线的所有上级
			if (users.data[j]._id == ids[0]) { //是直推上级
				upUser = users.data[j]
			}
			// if (users.data[j]._id == ids[1]) { //是间接上级
			// 	dirUser = users.data[j]
			// }
			if (users.data[j].isHow >= 3 && (users.data[j]._id == ids[i])) { //如果上级中有第三条线出来的，当前用户根据第三条线对应的月老
				isWho = users.data[j].isWho
				flag = true
				break //结束循环
			}
		}
		if (flag) {
			break
		}
	}
	console.log("isWho++++", isWho)
	// if (!isWho) { //本条线还没有月老 将本条线都归属到最顶层人下
	// 	isWho = users.data[uLen - 1] ? users.data[uLen - 1]._id : ''
	// }

	if (!upUser.level) { //直接推荐人的身份是普通会员,
		// let dirNum = 1 //是上级的第几条线，默认是1
		// if (!dirUser._id) { //不存在间接推荐人
		// 	userArr.push({ //更新直接推荐人为红娘
		// 		level: 1,
		// 		isHow: dirNum,
		// 		isWho: isWho,
		// 		subNum: 1,
		// 		id: upUser._id
		// 	})
		// 	// 设置当前人的身份信息
		// 	userArr.push({
		// 		level: 1,
		// 		isHow: 1,
		// 		isWho: isWho,
		// 		subNum: 0,
		// 		id: id
		// 	})
		// }

		// if (!dirUser.subNum) { //如果间接推荐人没有红娘，更新间接推荐人的红娘数量为1
		// 	userArr.push({
		// 		subNum: 1,
		// 		id: dirUser._id
		// 	})
		// } else if (dirUser.subNum == 1) { //如果间接推荐人已有一个红娘，更新下级红娘数量及出局，还没有红娘不影响
		// 	let dlevel = 2
		// 	if(dirUser.level == 3){ //如果直接推荐人的身份是联创，还是联创
		// 		dlevel = 3
		// 	}
		// 	userArr.push({
		// 		level: dlevel, //间接推荐人出局
		// 		subNum: 2, //红娘数量该为2
		// 		id: dirUser._id
		// 	})
		// 	dirNum = 2 //第二条线
		// } else if (dirUser.level >= 2) { //间接推荐人已经是月老 ，更新推荐人是第几条线，及所属月老
		// 	dirNum = dirUser.subNum + 1 //第n条线
		// 	isWho = dirUser._id //上级已经出局，更改ISWHO
		// 	//更新间接推荐人的下级红娘数量
		// 	userArr.push({
		// 		subNum: dirNum,
		// 		id: dirUser._id
		// 	})
		// }
		//更新直接推荐人为红娘
		// userArr.push({
		// 	level: 1,
		// 	isHow: dirNum,
		// 	isWho: isWho,
		// 	subNum: 1,
		// 	id: upUser._id
		// })
		// 设置当前人的身份信息
		userArr.push({
			level: 1,
			isHow: 1,
			isWho: isWho,
			subNum: 0,
			id: id
		})
	} else { //直接推荐人的身份不是普通会员,更新下级红娘数及当前等级是否出局

		let sum = 0
		let level = 0
		let isHow = 0
		//为了清楚的表达逻辑，写出每一步  
		if (!upUser.subNum) { //直接推荐人还没有推荐红娘，说明当前人为直接推荐人的第一个红娘
			sum = 1
			level = 1 //直接推荐人的身份还是红娘
			isHow = 1 //是直接推荐人的第一条线，后续判断留给上级的用户
		} else if (upUser.subNum == 1) { //直接推荐人已推荐有一个红娘，说明当前人为直接推荐人的第二个红娘，直接推荐人出局，并修改身份
			sum = 2
			level = 2 //成为月老
			isHow = 2 //是直接推荐人的第二条线，后续判断留给上级的用户
		} else {
			sum = upUser.subNum + 1
			level = 2 //身份还是月老
			isWho = upUser._id //更改下级的直属月老
			isHow = upUser.subNum + 1 //是直接推荐人的第n条线，后续判断留给自己的用户
		}
		//更新直接推荐人的身份等等，下级红娘数量
		if(upUser.level == 3){ //如果直接推荐人的身份是联创，还是联创
			level = 3
		}
		userArr.push({
			level: level,
			subNum: sum,
			id: upUser._id
		})
		// 设置当前人的身份信息
		userArr.push({
			level: 1,
			isHow: isHow,
			isWho: isWho,
			subNum: 0,
			id: id
		})

	}
	let r1 = await setInviteUser(userArr)
	let r2 = await setProfit({id,orderid,price:52000})
	return{
		user:r1,
		order:r2
	}
	// return await setInviteUser(userArr) //更新会员信息
}
async function setInviteUser(data) {
	console.log("setInviteUser-data++++", data)
	if(data.length == 0){
		return true 
	}
	for (let i = 0; i < data.length; i++) {
		let id = data[i].id
		console.log("id+++", id,data[i])
		delete data[i].id
		await db.collection('uni-id-users').doc(id).update(data[i])
	}
	return true
}

//设置红娘奖励
async function setProfit({
	id,
	orderid,
	price
}) {
	let addArr = []
	let now = new Date().getTime() //获取当前时间戳
	let profitObj = {
		uid: id, //利益来源方
		create_time: now, //分配时间
		orderid, //订单Id
		type: 1
	}

	let res = await userTable.doc(id).field({
		inviter_uid: true,
		isWho: true
	}).get()
	let ids = res.data[0].inviter_uid || []
	let isWho = res.data[0].isWho || ''
	if (ids.length == 0) { //没有直接推荐人
		return true
	}
	if (isWho == ids[0]) { //所分润的直接推荐人，与所属第三方市同一人
		addArr.push(Object.assign({}, profitObj, {
			pid: isWho, //利益分配方
			price: 30000, //分配利益金额
			commit: "直推+管理奖", //分配说明
		}))
		let isRes = await userTable.doc(isWho).field({
			inviter_uid: true,
		}).get()
		let iIds = isRes.data[0].inviter_uid || []
		if(iIds.length>0){
			let res1 = await userTable.doc(iIds[0]).field({
				level: true,
			}).get()
			if(res1.data[0] && res1.data[0].level>1){
				addArr.push(Object.assign({}, profitObj, {
					pid: iIds[0], //利益分配方
					price: 30000*0.15, //分配利益金额
					commit: "平级奖励", //分配说明
				}))
			}
		}
		
		return await setUserOrder(addArr)
	}
	//查询直接推荐人
	let upRes = await userTable.doc(ids[0]).field({
		level: true
	}).get()
	if (upRes.data[0] && upRes.data[0].level > 0) { //直接推荐人等级不是普通会员
		addArr.push(Object.assign({}, profitObj, {
			pid: ids[0], //利益分配方
			price: 10000, //分配利益金额
			commit: "直推奖励", //分配说明
		}))
	}
	if (isWho) { //存在第三条线，就分润给第三条线
		addArr.push(Object.assign({}, profitObj, {
			pid: isWho, //利益分配方
			price: 20000, //分配利益金额
			commit: "管理奖", //分配说明
		}))
		let isRes = await userTable.doc(isWho).field({
			inviter_uid: true,
		}).get()
		let iIds = isRes.data[0].inviter_uid || []
		if(iIds.length>0){
			let res1 = await userTable.doc(iIds[0]).field({
				level: true,
			}).get()
			if(res1.data[0] && res1.data[0].level>1){
				addArr.push(Object.assign({}, profitObj, {
					pid: iIds[0], //利益分配方
					price: 20000*0.15, //分配利益金额
					commit: "平级奖励", //分配说明
				}))
			}
		}
	}
	return await setUserOrder(addArr)
}

async function setUserOrder(data) {
	console.log("setUserOrder++++++",data)
	if(data.length == 0){
		return true
	}
	for (let i = 0; i < data.length; i++) {
		await db.collection('uni-id-users').doc(data[i].pid).update({
			money: $.inc(data[i].price),
			total_money:$.inc(data[i].price)
		})
	}
	console.log("dataOrder++", data)
	return await db.collection("wolf-profit-order").add(data)
}

module.exports = {
	getInviteUser
}